/*
 * Name: $RCSfile: MySSLSocketFactory.java,v $
 * Version: $Revision: 1.1 $
 * Date: $Date: Dec 5, 2011 1:25:42 PM $
 *
 * Copyright (C) 2011 COMPANY_NAME, Inc. All rights reserved.
 */

package hoang.hut.app.network;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.ssl.SSLSocketFactory;

/**
 * MySSLSocketFactory class supports making https connections
 * 
 * @author sonnv6207
 */
public class MySSLSocketFactory extends SSLSocketFactory
{
    SSLContext sslContext = SSLContext.getInstance("TLS");

    /**
     * Constructor
     * 
     * @param truststore
     * @throws NoSuchAlgorithmException
     * @throws KeyManagementException
     * @throws KeyStoreException
     * @throws UnrecoverableKeyException
     */
    public MySSLSocketFactory(KeyStore truststore)
        throws NoSuchAlgorithmException, KeyManagementException,
        KeyStoreException, UnrecoverableKeyException
    {
        super(truststore);
        TrustManager tm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain,
                String authType) throws CertificateException
            {}

            @Override
            public void checkServerTrusted(X509Certificate[] chain,
                String authType) throws CertificateException
            {}

            @Override
            public X509Certificate[] getAcceptedIssuers()
            {
                return null;
            }
        };
        
        sslContext.init(null, new TrustManager[] {tm}, null);
    }
    

    @Override
    public Socket createSocket(Socket socket, String host, int port,
        boolean autoClose) throws IOException, UnknownHostException
    {
        return sslContext.getSocketFactory().createSocket(socket, host, port,
            autoClose);
    }


    @Override
    public Socket createSocket() throws IOException
    {
        return sslContext.getSocketFactory().createSocket();
    }
}
